/*
给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。

*/
#include <iostream>
#include <string>
#include <set>
#include <map>

using namespace std;
/*
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len=s.size();
        //cout<<"s.len="<<len<<endl;
        set<string> all_item;
        string a;
        for (string::iterator it =s.begin();it!=s.end();it++)
        {
            a.push_back(*it);
            all_item.insert(a);
            //cout<<(*it)<<endl;
            a.clear();
        }
        int max_rep=all_item.size();
        //cout<<"max_rep="<<max_rep<<endl;
        int search_len=max_rep;
        string tmp;
        set<string> search_item;
        for (int i=max_rep;i>0;i--)
        {
            for(int j=0;j<len-i+1;j++)
            {
                tmp=s.substr(j,i);
                //cout<<"string tmp="<<tmp<<endl;       
                for (string::iterator it =tmp.begin();it!=tmp.end();it++)
                {
                    a.push_back(*it);
                    search_item.insert(a);
                    //cout<<(*it)<<endl;
                    a.clear();
                }
                if(search_item.size()==tmp.size())
                {
                    return tmp.size();
                }
                search_item.clear();
            }
        }
    }
};
*/

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        map<char,int> dict;
        
    }
}
int main()
{
    string str="kbpjjxrrrgejkrapjvldmgofucbtokobnfmwddnuluewlglwbyzneoubsxughkjwpvtsyinkctiobvmcumracmbujxct";
    set<string> all_item;
    /*
    for (string::iterator it =str.begin();it!=str.end();it++)
    {
        cout<<typeid(*it).name()<<endl;
    }
    */
    
    Solution s;
    cout<<s.lengthOfLongestSubstring(str)<<endl;
    
    return 0;
}

//2020.8.11 town
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> uset;
        int max_len=0;
        
        int r=0;
        for(int l=0;l<s.size();l++){
            if(l!=0){
                uset.erase(s[l-1]);
            }
            while(r<s.size() && uset.count(s[r])==0){
                uset.insert(s[r]);
                r++;
            }
            max_len=max(max_len,r-l);
        }
        return max_len;
    }
};